<?php
class Menu {
    
    private $menu;
    private $linguagem;
    private $id_usuario;
    private $escondeSubmenu = TRUE;
    
    /**
     * Define a linguagem que deve aparecer o menu.
     * deve conter apenas 2 caracteres.
     *
     * @param char $linguagem linguagem do menu
     * @example br, en, es
     */
    public function setLinguagem( $linguagem ) {
        $this->linguagem = $linguagem;
    }
    
    /**
     * Define para qual usuario devera ser construido o menu.
     *
     * @param integer $id_usuario id do usuario
     * @example 1, 2, 3,
     */
    public function setIdUsuario( $id_usuario ) {
        $this->id_usuario = $id_usuario;
    }
    
    /**
     * Responsavel em dar inicio a montagem do menu.
     *
     * @return string Ira retornar uma string do menu
     */
    
    public function montaMenu() {
        $this->menu .=  $this->montaPasta(1);
        return $this->menu;
    }
    
    /**
     * Método recursivo para montar todas pastas ao usuario definido
     *
     * @param integer $id_menu_pasta id da parta para pesquisa
     * @return string ira retornar a pasta com seus arquivos
     */
    private function montaPasta($id_menu_pasta) {
        try {
            $pdo = Conexao::open('sistema');

            //verifica se foi configurado para não esconder o submenu ao clicar
            try {
                $objSecretariaConfiguracaoSistema = new SecretariaConfiguracaoSistemaExecuta($pdo);
                $consulta = $objSecretariaConfiguracaoSistema->listar();
                if($consulta->rowCount()) {
                    $linha = $consulta->fetch(PDO::FETCH_ASSOC);

                    if (!$linha['esconde_menu']) {
                        $this->escondeSubmenu = FALSE;
                    }
                }
            } catch(PDOException $e) {
            } catch(Exception $e) {
            }
            
            $sql = "SELECT
                        menu_pasta.id_menu_pasta AS id_menu_pasta,
                        menu_pasta.nome_pasta_{$this->linguagem} AS nome_pasta
                    FROM
                        configuracao.menu_pasta
                    WHERE
                        menu_pasta.id_menu_sub_pasta = {$id_menu_pasta}
                    ORDER BY
                        menu_pasta.nome_pasta_{$this->linguagem};";
            $resultado = $pdo->query($sql);
            
            $id_menu_pasta = ($id_menu_pasta == 1) ? 0 : $id_menu_pasta;
            $pasta_arquivo = "";
            
            $pasta = "<ul class='nav navbar-nav'>";
            while ( $pastas = $resultado->fetch(PDO::FETCH_ASSOC) ) {
                $arquivo = $this->montaArquivo($pastas['id_menu_pasta']); // chama funcao que diz se existe arquivo
                if ($arquivo) {
                    $pasta .= "<li class=\"dropdown\">";
                    $x = $pastas['id_menu_pasta'];
                    $pasta .= '<a  class="dropdown-toggle" data-toggle="dropdown">'. htmlspecialchars($pastas['nome_pasta']) .$pastas['id_menu_pasta']. " <b class=\"caret\"></b></a>";
					$pasta .= $this->montaArquivo($pastas['id_menu_pasta']);
                    $pasta .= "</li>";
                }
            }
            $pasta .= "</ul>";
            
            return $pasta;
        } catch(PDOException $e) {
            new Excecao($e);
        }
    }
    
    /**
     * Metodo responsavel em buscar todos arquivos de uma determinada pasta
     *
     * @param integer $id_menu_pasta id da pasta para buscar arquivo
     * @return string ira retornar todos arquivos da pasta
     */
    private function montaArquivo($id_menu_pasta) {
        try {
            $pdo = Conexao::open('sistema');

            $sql = "SELECT
                    distinct menu_arquivo.id_menu_arquivo AS id_menu_arquivo,
                    menu_arquivo.nome_arquivo_{$this->linguagem} AS nome_arquivo,
                    menu_arquivo.pagina AS pagina,
                    menu_arquivo.nome_div AS nome_div,
                    menu_arquivo.titulo AS titulo,
                    menu_arquivo.target AS target,
                    menu_arquivo.icone AS icone,
                    menu_arquivo.icone_open AS icone_open
                FROM
                    configuracao.menu_arquivo
                INNER JOIN
                    configuracao.menu_arquivo_permissao ON menu_arquivo_permissao.id_menu_arquivo = menu_arquivo.id_menu_arquivo
                INNER JOIN
                    configuracao.permissao_usuario ON permissao_usuario.id_menu_arquivo_permissao = menu_arquivo_permissao.id_menu_arquivo_permissao
                WHERE
                    permissao_usuario.id_usuario = {$this->id_usuario} AND
                    menu_arquivo.id_menu_pasta = {$id_menu_pasta} AND
                    menu_arquivo.aparecer_menu = true
                ORDER BY menu_arquivo.nome_arquivo_{$this->linguagem};";
            $resultado = $pdo->query($sql);
            
            $id_menu_pasta = ($id_menu_pasta == 1) ? 0 : $id_menu_pasta;
            $arquivo = "";
            $arquivo .= '<ul  class="dropdown-menu">';
            if (!$resultado->rowCount())
                return false;
            $escondeSubMenuAux = "";
            if($this->escondeSubmenu) {
                $escondeSubMenuAux = " EsondeMenu($id_menu_pasta); ";
            }
            while ( $arquivos = $resultado->fetch(PDO::FETCH_ASSOC) ) {
                $arquivo .= "<li>";   
                $arquivo .= "<a onclick=\"Load('".htmlspecialchars($arquivos['pagina'])."','".htmlspecialchars($arquivos['nome_div'])."'); {$escondeSubMenuAux} \">". htmlspecialchars($arquivos['nome_arquivo']) ."</a>";   
                $arquivo .= "</li>";   
            }
            $arquivo .= "</ul>";
            $pdo = null;
            return $arquivo;
        } catch (PDOException $e) {
            new Excecao($e);
        }
    }
}
?>